#include<bits/stdc++.h>
#define ll long long
using namespace std;

const ll inf=-1e13;

int n,m,k;
int a[105];
unordered_map<ll,ll> dp;
ll q[5000005],p[5000005],tmp,ans=-inf;
int sp,sq;
int sz[105];

inline void dfs1(int u,int cnt,int val,ll w)
{
    if(cnt>u)
        return;

    ll tp=w;

    if(!u||!cnt)
    {
        tmp=sz[k];
        for(int i=k-1;i>=1;i--)
            tmp=tmp*(m+1)+sz[i];

        if(dp[tmp]==0)
            p[++sp]=tmp;

        dp[tmp]=min(dp[tmp],w);

        return;
    }

    if(u==cnt)
    {
        if(sz[u]==m)
            return;

        for(int i=1;i<=u;i++)
        {
            sz[i]++;
            if(sz[i]==1)
                tp-=val;
            if(sz[i]==m)
                tp+=val;
        }

        dfs1(0,0,val,tp);

        for(int i=1;i<=u;i++)
            sz[i]--;

        return;
    }

    if(sz[u]==m)
    {
        dfs1(u-1,cnt,val,w);
        return;
    }

    sz[u]++;
    if(sz[u]==1)
        tp-=val;
    if(sz[u]==m)
        tp+=val;

    dfs1(u-1,cnt-1,val,tp);

    sz[u]--;
    while(u-1&&sz[u-1]==sz[u])
        u--;

    dfs1(u-1,cnt,val,w);
}

inline void getans1(ll id,int cnt,int val)
{
    ll w=dp[id];

    for(int i=1;i<=k;i++)
    {
        sz[i]=id%(m+1);
        id/=m+1;
    }

    dfs1(k,cnt,val,w);
}

inline void dfs2(int u,int cnt,int val,ll w,int cur)
{
    if(cnt>cur)
        return;

    ll tp=w;

    if(u==-1||!cnt)
    {
        tmp=sz[m];
        for(int i=m-1;i>=0;i--)
            tmp=tmp*(k+1)+sz[i];

        if(dp[tmp]==0)
            p[++sp]=tmp;

        dp[tmp]=min(dp[tmp],w);

        return;
    }

    dfs2(u-1,cnt,val,w,cur-sz[u]);

    int ttp=sz[u];

    for(int i=1;i<=cnt&&i<=ttp;i++)
    {
        if(u==0)
            tp-=val;
        if(u==m-1)
            tp+=val;

        sz[u+1]++,sz[u]--;
        dfs2(u-1,cnt-i,val,tp,cur-ttp);
    }

    sz[u+1]-=ttp-sz[u];
    sz[u]=ttp;
}

inline void getans2(ll id,int cnt,int val)
{
    ll w=dp[id];

    for(int i=0;i<=m;i++)
    {
        sz[i]=id%(k+1);
        id/=k+1;
    }

    dfs2(m-1,cnt,val,w,k-sz[m]);
}

int main()
{
    freopen("diyiti.in","r",stdin);
    freopen("diyiti.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    cin>>n>>k;
    m=n/k;

    for(int i=1;i<=n;i++)
        cin>>a[i];

    sort(a+1,a+n+1);

    if(m==1)
    {
        cout<<"0\n";
        return 0;
    }
    
    if(k*k<=n)
    {
        dp[0]=inf;
        q[sq=1]=0;

        for(int i=1;i<=n;i++)
        {
            int j=i;

            while(j<n&&a[i]==a[j+1])
                j++;

            if(j-i+1>k)
            {
                cout<<"-1\n";
                return 0;
            }

            while(sq)
            {
                getans1(q[sq],j-i+1,a[i]);
                sq--;
            }

            for(int j=1;j<=sp;j++)
                q[j]=p[j];
            sq=sp,sp=0;

            i=j;
        }

        for(int i=1;i<=sq;i++)
            ans=min(ans,dp[q[i]]-inf);

        cout<<ans<<'\n';
    }
    else
    {
        dp[k]=inf;
        q[sq=1]=k;

        for(int i=1;i<=n;i++)
        {
            int j=i;

            while(j<n&&a[i]==a[j+1])
                j++;

            if(j-i+1>k)
            {
                cout<<"-1\n";
                return 0;
            }

            while(sq)
            {
                getans2(q[sq],j-i+1,a[i]);
                sq--;
            }

            for(int j=1;j<=sp;j++)
                q[j]=p[j];
            sq=sp,sp=0;

            i=j;
        }

        for(int i=1;i<=sq;i++)
            ans=min(ans,dp[q[i]]-inf);

        cout<<ans<<'\n';
    }

    return 0;
}